package main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import controller.ChatController;
import controller.Refreshable;

/**
 * Interface textuelle du chat. C'est elle qui a permis de développer la base du
 * projet, avant la création de l'interface graphique. Cependant, elle reste
 * fonctionnelle et peut communiquer avec l'interface graphique. Sa seule
 * limitation est de ne pas pouvoir envoyer et recevoir de fichiers.
 * 
 * @author Flo
 * 
 */
public class ChatTextualUI {

	/**
	 * Main de l'interface textuelle
	 */
	public static void main(String[] argv) {

		// Ecoute de l'entree standard
		BufferedReader reader;
		reader = new BufferedReader(new InputStreamReader(System.in));

		// Nom et port par defaut
		String nom = "Quelqu'un";
		int port = 2235;

		System.out.println("Bienvenue sur le ChatSystem ! Quel est ton nom ?");

		// Saisie du nom
		try {
			nom = reader.readLine();
		} catch (IOException ioe) {
			System.out.println("Echec de la saisie, tu t'appelleras donc "
					+ nom);
		}

		// Creation du controleur. Dans le cas de l'interface textuelle, on
		// n'utilise pas de Refreshable (trop d'actions declenchent une mise a
		// jour de l'interface graphique, et appliquer autant de mises a jour
		// pour l'interface textuelle la rendrait illisible).
		// Ici, on declare donc un Refreshable anonyme qui ne fait rien
		ChatController monChat = new ChatController(new Refreshable() {

			@Override
			public void refresh() {
				// Rien a faire dans rafraichir
			}
		});
		monChat.init(nom, port, new OutputStreamWriter(System.out));

		// Connexion
		monChat.connecter();
		System.out.println("Connecté !");

		printHelp();

		boolean quitter = false;

		// Boucle principale
		while (!quitter) {
			// Saisie du nom
			try {
				String texte = reader.readLine();
				if (texte.startsWith("Copain")) {
					// Decoupe une string selon les caracteres fournis ; ici, on
					// aura ["Copain", "Toto"]
					String nomCopain = texte.split(" ")[1];
					if (monChat.choisirCopainCourant(nomCopain)) {
						System.out.println("Copain courant : " + nomCopain);
					} else {
						System.err.println("Echec du changement de copain, "
								+ nomCopain + " n'existe pas.");
					}
				} else if (texte.equals("Bye")) {
					monChat.deconnecter();
					quitter = true;
				} else if (texte.equals("Help")) {
					printHelp();
				} else {
					if (!monChat.envoyerTexte(texte)) {
                                            System.err.println("*** Il faut choisir un copain ! ***");
                                        }
				}

			} catch (IOException ioe) {
				System.err.println("Echec de la saisie");
			}
		}
	}

	private static void printHelp() {
		System.out.println("\n***********************************************");
		System.out.println("Options disponibles :");
		System.out
				.println("\"Copain Toto\" : permet de choisir Toto comme interlocuteur");
		System.out.println("\"Bye\" : permet de quitter");
		System.out.println("\"Help\" : permet de reafficher l'aide");
		System.out.println("Tout autre texte sera envoyé au copain courant");
		System.out.println("***********************************************\n");
	}
}
